// ==UserScript== // @name 网页继续教育万能自动播放视频倍数,支持国家开放大学|成人本科|继续教育|教师|会计|医生|华医网|好医生|公需课|专业课|网课等均部分支持需要尝试 // @namespace Jay // @version 1.6 // @license MIT // @description 优化倍速窗口UI,增加确认按钮,按要求调整倍速输入(限制为1到16倍)、强制倍速开关与公告的布局,脚本简单明确话! // @author 各种继续教育学习 // @match *://*/* // @grant none // ==/UserScript== (function() { 'use strict'; let currentRate = 1.0; let isMinimized = false; let isForceRateEnabled = true; let modalInstance = null; function setPlaybackRate(rate) { const videos = document.querySelectorAll('video'); videos.forEach(video => { try { video.playbackRate = rate; video.play().catch(() => {}); } catch (error) { console.warn('倍速设置失败,视频不支持倍速播放'); } }); } function forcePlaybackRate() { const videos = document.querySelectorAll('video'); videos.forEach(video => { if (!video.playbackRate) { video.playbackRate = currentRate; } video.play().catch(() => {}); }); } function toggleForceRate() { isForceRateEnabled =!isForceRateEnabled; const status = isForceRateEnabled? '开启' : '关闭'; console.log(`倍速功能已${status}`); modalInstance.querySelector('#forceRateStatus').innerText = `倍速强制功能: ${status}`; if (isForceRateEnabled) { forcePlaybackRate(); } else { resetPlaybackRate(); } } function resetPlaybackRate() { const videos = document.querySelectorAll('video'); videos.forEach(video => { video.playbackRate = 1.0; }); } function createModal() { if (modalInstance) { modalInstance.style.display = 'block'; return modalInstance; } const modal = document.createElement('div'); modal.style.position = 'fixed'; modal.style.left = '0'; modal.style.top = '50%'; modal.style.transform = 'translateY(-50%)'; modal.style.backgroundColor = 'white'; modal.style.padding = '20px'; modal.style.zIndex = '1000'; modal.style.borderRadius = '5px'; modal.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.1)'; modal.style.width = '300px'; modal.style.height = 'auto'; modal.style.textAlign = 'center'; modal.style.fontFamily = 'Arial, sans-serif'; modalInstance = modal; const closeButton = document.createElement('button'); closeButton.textContent = 'x'; closeButton.style.position = 'absolute'; closeButton.style.top = '5px'; closeButton.style.right = '5px'; closeButton.style.padding = '5px 10px'; closeButton.style.fontSize = '18px'; closeButton.style.cursor = 'pointer'; closeButton.style.backgroundColor = 'transparent'; closeButton.style.border = 'none'; closeButton.style.color = '#d9534f'; closeButton.onclick = function() { modal.style.display = 'none'; }; modal.appendChild(closeButton); const minimizeButton = document.createElement('button'); minimizeButton.textContent = '–'; minimizeButton.style.position = 'absolute'; minimizeButton.style.top = '5px'; minimizeButton.style.right = '40px'; minimizeButton.style.padding = '5px 10px'; minimizeButton.style.fontSize = '18px'; minimizeButton.style.cursor = 'pointer'; minimizeButton.style.backgroundColor = 'transparent'; minimizeButton.style.border = 'none'; minimizeButton.style.color = '#5bc0de'; minimizeButton.onclick = function() { toggleMinimize(modal); }; modal.appendChild(minimizeButton); const rateLabel = document.createElement('label'); rateLabel.innerText = '请输入倍速(1-16):'; modal.appendChild(rateLabel); const rateInput = document.createElement('input'); rateInput.type = 'number'; rateInput.step = '0.1'; rateInput.min = '1'; rateInput.max = '16'; rateInput.value = currentRate; rateInput.style.marginTop = '10px'; rateInput.style.fontSize = '16px'; rateInput.style.padding = '5px'; rateInput.style.width = '100px'; modal.appendChild(rateInput); const confirmButton = document.createElement('button'); confirmButton.innerText = '确认'; confirmButton.style.marginTop = '20px'; confirmButton.style.padding = '5px 10px'; confirmButton.style.fontSize = '14px'; confirmButton.style.cursor = 'pointer'; confirmButton.style.width = '100%'; confirmButton.onclick = function() { let newRate = parseFloat(rateInput.value); if (!isNaN(newRate) && newRate >= 1 && newRate <= 16) { currentRate = newRate; setPlaybackRate(currentRate); } else { alert('请输入有效的倍速值(1到16之间)。'); } }; modal.appendChild(confirmButton); const toggleRateButton = document.createElement('button'); toggleRateButton.innerText = isForceRateEnabled? '关闭倍速强制' : '开启倍速强制'; toggleRateButton.style.marginTop = '20px'; toggleRateButton.style.padding = '5px 10px'; toggleRateButton.style.fontSize = '14px'; toggleRateButton.style.cursor = 'pointer'; toggleRateButton.style.width = '100%'; toggleRateButton.onclick = function() { toggleForceRate(); toggleRateButton.innerText = isForceRateEnabled? '关闭倍速强制' : '开启倍速强制'; }; modal.appendChild(toggleRateButton); const rateStatus = document.createElement('p'); rateStatus.id = 'forceRateStatus'; rateStatus.innerText = `倍速强制功能: ${isForceRateEnabled? '开启' : '关闭'}`; rateStatus.style.marginTop = '20px'; rateStatus.style.fontSize = '14px'; rateStatus.style.color = '#555'; modal.appendChild(rateStatus); const additionalInfo = document.createElement('div'); additionalInfo.innerHTML = ` 倍速需谨慎
不是所有的学习平台都可以进行倍数
该平台是否支持请自行测试
若没记录则表示为不可以
添加仅解决代刷问题非脚本问题
需要帮忙学习联系 v:study-088 `; additionalInfo.style.fontSize = '16px'; additionalInfo.style.color = '#777'; additionalInfo.style.marginTop = '10px'; modal.appendChild(additionalInfo); document.body.appendChild(modal); return modal; } function toggleMinimize(modal) { if (isMinimized) { modal.style.height = 'auto'; modal.style.padding = '20px'; modal.querySelector('input').style.display = 'block'; modal.querySelector('button').style.display = 'block'; modal.querySelector('p').style.display = 'block'; modal.querySelector('div').style.display = 'block'; isMinimized = false; modal.querySelector('button:nth-child(2)').textContent = '–'; } else { modal.style.height = '40px'; modal.style.padding = '10px'; modal.querySelector('input').style.display = 'none'; modal.querySelector('button').style.display = 'none'; modal.querySelector('p').style.display = 'none'; modal.querySelector('div').style.display = 'none'; isMinimized = true; modal.querySelector('button:nth-child(2)').textContent = '展开'; } } createModal(); setInterval(() => { if (isForceRateEnabled) { forcePlaybackRate(); // 强制倍速 } }, 1000); })();